package priv.ln.testapply;

/**
 * ClassName: MyArrayList
 * Package: priv.ln.exer
 * Description:
 *  MyArrayList类，当做容器类使用，模拟动态数组数据结构的容器
 *
 *
 * @Author 辣辣
 * @Create 2025/4/5 10:35
 * @Version 1.0
 */
public class MyArrayList implements Touchable {
    private Object[] all = new Object[2];//保存对象，初始化长度为2
    private int total;//记录实际存储的对象个数

    /**
     * 用于添加一个元素到当前容器中，如果数组all已满，就扩容为原来的2倍
     * @param element
     */
    public void add(Object element) {
        if (total == all.length) {
            Object[] temp = all;
            all = new Object[all.length * 2];
            System.arraycopy(temp, 0, all, 0, temp.length);
        }
        all[total] = element;
        total++;
    }

    /**
     * 如果index<0或index>=total就打印“没有这个元素”并返回，否则删除index位置的元素
     * @param index
     */
    public void remove(int index) {
        if (index < 0 || index >= total) {
            System.out.println("没有这个元素");
        }
        for (int i = index; i < total - 1; i++) {
            all[i] = all[i + 1];
        }
        all[total - 1] = null;
        total--;
    }

    /**
     * 如果index<0或index>=total就打印“没有这个元素”并返回，否则就替换index位置的元素为value
     * @param index
     * @param value
     */
    public void set(int index, Object value) {
        if (index < 0 || index >= total) {
            System.out.println("没有这个元素");
        }
        all[index] = value;
    }

    /**
     * 如果index<0或index>=total就打印“没有这个元素”并返回null，否则返回index位置的元素
     * @param index
     * @return
     */
    public Object get(int index){
        if (index < 0 || index >= total) {
            System.out.println("没有这个元素");
        }
        return all[index];
    }

    @Override
    public Selector select() {
        return new MySelector();
    }

    private class MySelector implements Selector{
        int cursor;

        @Override
        public boolean hasNext() {
            return cursor != total;
        }

        @Override
        public Object next() {
            return all[cursor++];
        }
    }
}
